//数组约束
//1.类型+字面量[]
let arr:number[]
arr = [1,2,3,4]

//2.泛型约束
let arr1:Array<string|number>
arr1 = ['杨敏',123,'666']

//3.使用interface约定数组格式
interface TestType {
	[index:number]:number|string
}
let arr2:TestType
arr2 = [1,2,3,'4']

//4.元组 固定数量的集合
let pos:[number,number]
pos = [103.33,66.8]

//二、枚举
//有固定特征的数据：星期、订单状态
enum Week {
	'星期一',
	'星期二',
	'星期三',
	'星期四',
	'星期五',
	'星期六',
	'星期天',
}
console.log(Week['星期一']);
//实例
//后端下发订单数据包
//30 待支付 42待发货 53已签收
interface GoodType {
	name:string,
	price:number,
	status:number
}
let orders:Array<GoodType> = [
	{name:'轩辕剑',price:299999,status:30},
	{name:'神农鼎',price:299999,status:42},
	{name:'诛仙剑',price:199999,status:53},
]
enum OrdersStatus {
	'待支付' = 30,
	'待发货' = 42,
	'已签收' = 53
}
for(let i = 0;i<orders.length;i++){
	console.log(`${orders[i].name} 订单状态：${OrdersStatus[orders[i].status]}`);
}

//对象内部this指向
// let user = {
// 	name:'杨敏',
// 	showName(){
// 		console.log(this.name);
// 	}
// }

// let user = {
// 	name:'杨敏',
// 	showName(){
// 		return ()=>{
// 			console.log(this.name);//使用箭头函数指向跟所处的环境有关
// 		}
// 	}
// }

// 函数重载 可以让多功能的逻辑函数可读性更强
//需求：封住一个函数，对传入的参数进行反转操作并返回跟入参类型相同的反转结果
//hello-->olleh
//123-->321
//[1,2,3]-->[3,2,1]
function reverseFuc(arg:string):string
function reverseFuc(arg:number):number
function reverseFuc(arg:Array<number>):Array<number>
function reverseFuc(arg:string|number|Array<number>):string|number|Array<number>{
	if(typeof arg =='string'){
		return arg.split('').reverse().join('')	
	}
	if(typeof arg =='number'){
		return parseInt((arg+'').split('').reverse().join(''))
	}
	return arg.reverse()
} 